import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

# 设置页面标题
st.title("简易数据可视化应用")

# 创建侧边栏
with st.sidebar:
    st.header("设置")
    # 添加滑块控件
    sample_size = st.slider("样本数量", min_value=10, max_value=100, value=50)
    # 添加颜色选择器
    plot_color = st.color_picker("选择图表颜色", "#1f77b4")

# 生成示例数据
data = {
    'x': range(sample_size),
    'y': [i**2 + i*5*pd.np.random.randn() for i in range(sample_size)],
    'category': ['A' if i % 2 == 0 else 'B' for i in range(sample_size)]
}
df = pd.DataFrame(data)

# 主界面内容
st.subheader("数据预览")
st.dataframe(df.head())

# 添加图表
st.subheader("数据可视化")
fig, ax = plt.subplots(figsize=(10, 6))
scatter = ax.scatter(
    df['x'], 
    df['y'], 
    c=df['category'].map({'A': 'blue', 'B': 'red'}),
    alpha=0.6,
    s=50
)
ax.set_title("示例散点图")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")
ax.grid(True, linestyle='--', alpha=0.7)

# 添加图例
legend1 = ax.legend(*scatter.legend_elements(), title="类别")
ax.add_artist(legend1)

# 使用Streamlit显示图表
st.pyplot(fig)

# 添加交互元素
st.subheader("数据筛选")
selected_category = st.selectbox(
    "选择类别",
    ["全部", "A", "B"]
)

if selected_category != "全部":
    filtered_df = df[df['category'] == selected_category]
    st.write(f"筛选出的 {selected_category} 类数据: {len(filtered_df)} 条")
    st.dataframe(filtered_df)
else:
    st.write("显示全部数据")
